package com.aw.baselib.util.pictureutil

import android.content.Context
import android.graphics.Bitmap
import android.media.MediaMetadataRetriever
import android.widget.ImageView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.bumptech.glide.request.RequestOptions
import com.luck.picture.lib.engine.ImageEngine
import com.luck.picture.lib.utils.ActivityCompatHelper

class GlideUtils private constructor() : ImageEngine {
    /**
     * 加载图片
     *
     * @param context   上下文
     * @param url       资源url
     * @param imageView 图片承载控件
     */
    override fun loadImage(context: Context, url: String, imageView: ImageView) {
        if (!ActivityCompatHelper.assertValidRequest(context)) {
            return
        }
        Glide.with(context)
            .load(url) // .error(R.mipmap.icon_photo_error)
            .into(imageView)
    }

    /**
     * 加载图片
     *
     * @param context    上下文
     * @param url        资源url
     * @param imageView  图片承载控件
     * @param errorImage 图片加载失败资源文件
     */
    fun loadImage(context: Context?, url: String?, imageView: ImageView?, errorImage: Int) {
        if (!ActivityCompatHelper.assertValidRequest(context)) {
            return
        }
        Glide.with(context!!)
            .load(url)
            .error(errorImage)
            .into(imageView!!)
    }

    override fun loadImage(
        context: Context,
        imageView: ImageView,
        url: String,
        maxWidth: Int,
        maxHeight: Int
    ) {
        if (!ActivityCompatHelper.assertValidRequest(context)) {
            return
        }
        Glide.with(context)
            .load(url) //                .error(R.mipmap.ic_launcher)
            .override(maxWidth, maxHeight)
            .into(imageView)
    }

    /**
     * 加载相册目录封面
     *
     * @param context   上下文
     * @param url       图片路径
     * @param imageView 承载图片ImageView
     */
    override fun loadAlbumCover(context: Context, url: String, imageView: ImageView) {
        if (!ActivityCompatHelper.assertValidRequest(context)) {
            return
        }
        Glide.with(context)
            .asBitmap()
            .load(url) //                .error(R.mipmap.ic_launcher)
            .override(180, 180)
            .sizeMultiplier(0.5f)
            .transform(
                CenterCrop(),
                RoundedCorners(8)
            ) //                .placeholder(R.mipmap.ic_launcher)
            .into(imageView)
    }

    /**
     * 默认图片
     *
     * @param context
     * @param url
     * @param imageView
     */
    fun loadVideoThumb(context: Context?, url: String?, imageView: ImageView?) {
        loadVideoThumb(context, url, 0, imageView)
    }

    fun loadVideoThumb(context: Context?, url: String?, errorImage: Int, imageView: ImageView?) {
        Glide.with(context!!)
            .setDefaultRequestOptions(
                RequestOptions()
                    .frame(1000000)
                    .centerCrop()
                    .error(errorImage)
                    .placeholder(errorImage)
            )
            .load(url)
            .into(imageView!!)
    }

    /**
     * 获取视频第一证
     * @param path 文件路径
     * @return
     */
    fun loadVideoThumb(path: String?): Bitmap? {
        val media = MediaMetadataRetriever()
        media.setDataSource(path)
        return media.frameAtTime
    }

    /**
     * 加载图片列表图片
     *
     * @param context   上下文
     * @param url       图片路径
     * @param imageView 承载图片ImageView
     */
    override fun loadGridImage(context: Context, url: String, imageView: ImageView) {
        if (!ActivityCompatHelper.assertValidRequest(context)) {
            return
        }
        Glide.with(context)
            .load(url)
            .override(200, 200)
            .centerCrop() //                .error(R.mipmap.ic_launcher)
            //                .placeholder(R.mipmap.ic_launcher)
            .into(imageView)
    }

    override fun pauseRequests(context: Context) {
        Glide.with(context).pauseRequests()
    }

    override fun resumeRequests(context: Context) {
        Glide.with(context).resumeRequests()
    }

    private object InstanceHolder {
        val instance = GlideUtils()
    }

    companion object {
        @JvmStatic
        fun createGlideEngine(): GlideUtils {
            return InstanceHolder.instance
        }
    }
}